以下代码在 Twitter API 更新到 1.1 之后不再按原样工作 自 2013年6月11日 起。该 1.1 API 需要 oAuth,而 oAuth 需要服务器端组件。 这是一个使用 PHP 的方法 来与新 API 交互。通过 Google 搜索可以找到许多其他库等。有一个 纯 JavaScript 方法 用于获取推文,但这可能是一个漏洞,您可能不想依赖它。
<?php
function getTwitterStatus($userid){
$url = "https://api.twitter.com/1/statuses/user_timeline/$userid.xml?count=1&include_rts=1callback=?";
$xml = simplexml_load_file($url) or die("could not connect");
foreach($xml->status as $status){
$text = $status->text;
}
echo $text;
}
// USAGE
getTwitterStatus("chriscoyier");
?>
我得到的只是“无法连接”错误。代码似乎无法工作。
代码有效。可能会出现“无法连接”的几个原因
1. 您的 PHP 安装不支持 simple_xml
2. 您的服务器无法连接到外部站点。
第一种情况可能更常见。
只能接收后者,无法显示更多
代码无法正常工作的另一个原因可能是用于检索状态更新的 Twitter 帐户可能被“锁定”(私人帐户)。
您应该将其设置为公开状态更新;)
感谢这段代码,对我来说非常完美!
我建议不要使用 XML 格式,至少目前不要使用。似乎转发在 XML 和 JSON 提要中未包含。这没什么大不了的,除非它不仅仅跳过转发——它返回一条空白推文!
为了解决这个问题,我使用 RSS 格式。它有自己独特的挑战和不同的 XML 结构,但至少它会返回这些转发。
更多信息
http://apiwiki.twitter.com/Twitter-REST-API-Method%3A-statuses-user_timeline
如何修改它以显示最后 X 条推文而不是仅显示 1 条?
在
$url
中,而不是count
中的 1,使用“x”,其中“x”定义推文数量。我实现了上述代码,但我的推文中链接无效,即使它们在我的 Twitter 页面上是有效的。有什么想法吗?
我知道你几乎要崩溃了才能发布这段代码,但它在靠近此评论表单的“请记住”部分说明了你需要知道的所有内容。
感谢这段代码,运行完美!
我使用了这段代码,它对我有用,但我无法获取推文日期。你能帮我获取推文日期吗?
这段代码无法运行 :( ..
不确定是否已发布过,我在您的 foreach 循环中发现了一个小错误。
如果您设置了 ?count=5(或 1 以外的其他值),您将只回显您发布的第 5 条最新的推文。如果这就是您想要的,很好,但如果您想显示 5 条最新的推文,则需要将“echo $text;”放在 foreach 内部
在 $url 中,将 ?count=1 更改为 ?count=5 或 1 以外的其他值
好吧,它一开始运行完美,然后刷新页面后,它给出了无法连接到服务器的错误。想知道为什么它最初可以工作?
太棒了,谢谢 Chris。
两个版本对我来说都运行良好,现在只需对其进行样式化并将其放在我的主页上供我的用户使用。谢谢!
我搞定了,一切正常:) 谢谢 Chris
它对我来说间歇性地工作。它会正常显示所有内容,然后过了一会儿,它就会停止,我收到“无法连接”错误。
有什么想法吗?
我遇到了一些问题,无法使其正常工作,我意识到
$text = $status->text;
需要改为
$text .= $status->text;
否则代码只会打印一个。
好技巧!
我对脚本进行了一些修改。希望这对某些人有所帮助!:) `
在我的代码中无法使其正常工作。我使用了此 URL,它可以正常工作
$url = “http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=$userid&count=1”;
我使用了 @Walter 的代码,它对我有用,但我无法获取推文日期。谁能帮我获取推文日期?
我正在使用 Drupal 安装,尝试避免使用 OAuth 和当前版本的 Twitter 模块,而是使用此代码。不幸的是,“无法连接”错误对我来说会导致站点崩溃。它给了我一个白屏,并完全阻止我访问我的站点,直到错误最终(随机地)停止并且代码再次正常工作。有没有办法停止这种行为,或者是否有可能“更好”地满足我需求的代码片段?任何帮助表示感谢。谢谢!
我更改了 Walter 代码中的一小部分内容,因为希腊字符对我来说显示为问号。
所以我用 html_entity_decode($text) 替换了 utf8_decode($text),现在我的希腊字符显示正常!
<?php
function getLastXTwitterStatus($userid,$x){
$url = "http://twitter.com/statuses/user_timeline/$userid.xml?count=$x";
$xml = simplexml_load_file($url) or die('无法连接');
echo '<ul>';
foreach($xml->status as $status){
$text = twitterify( $status->text );
echo '<li>'.utf8_decode($text).'</li>';
}
echo '</ul>';
}
function twitterify($ret) {
$ret = preg_replace("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#", "\\1<a href=\"\\2\" >\\2</a>", $ret);
$ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", "\\1<a href=\"http://\\2\" >\\2</a>", $ret);
$ret = preg_replace("/@(\w+)/", "<a href=\"http://www.twitter.com/\\1\" >@\\1</a>", $ret);
$ret = preg_replace("/#(\w+)/", "<a href=\"http://search.twitter.com/search?q=\\1\" >#\\1</a>", $ret);
return $ret;
}
//我的用户 ID kenrick1991
getLastXTwitterStatus('kenrick1991',5);
?>
我一直在寻找在PHP中嵌入Twitter的不同方法,到目前为止,这是我见过的最好、最简单的方法。
有没有办法像通过Twitter搜索那样嵌入话题标签,而不是使用用户ID?这对活动来说非常棒!
我该如何缓存我的推文,因为我的页面加载速度似乎比平时慢?
有谁知道如何使用PHP获取Twitter账户的StatusesCount,然后将其作为纯文本数字返回到网页上以使用CSS进行格式化?我目前正在显示最近的5条推文,并在下方有一个“查看更多推文”的链接,该链接指向Twitter账户,但我希望能够说“查看更多推文,我们有x条可供阅读”。其中x是通过PHP返回的计数。谁能提供帮助,我以为很容易找到,但搜索了两个小时后,我仍然无法找到如何操作。谢谢T
很棒的帖子!我最近在主题构建中使用了@walter的代码,为了将$userid替换为主题用户输入的名称,我只是在顶部添加了一个变量,并在底部的函数调用中替换了用户名。
对于WordPress主题构建来说很不错。
有没有办法使用Walter的代码但排除任何@回复?
有没有办法显示多条推文,但每次只显示一条?或者甚至将它们全部放在一行中,用一些连字符之类的符号分隔?我正在尝试创建一个滚动字幕...
我实际上已经解决了!PHP很酷。
只需点击此链接
https://twitter.com/statuses/user_timeline/ranasaani.json
您将获得JSON对象
@usman 这是我见过的最简单的方法,谢谢..
我正在使用count=1检索最新的推文。
但是当我删除最新的推文时,Twitter返回空白。我正在使用XML/JSON格式。
非常感谢您提供简单而优秀的脚本 :)
我在这个网站上找到了一个类 http://www.thetutlage.com/post=TUT177
对我来说似乎很有希望..
如何使推文中任何链接都成为超链接?
我已经成功运行了,但链接是文本而不是链接。
谢谢
它一直工作到昨天,但今天当我检查时,它在我的网站 http://ankurgupta.com/ 上显示无法连接的消息,并且由于此错误,整个页面也无法加载 :(
如果用户的最后一条推文是“转发”,您将获得零结果,即一个空数组。或者如果count设置为3,并且用户的最新3条推文都是转发,您将再次获得一个空数组作为结果,情况相同。
要实现此目的,您需要使用更新版本的API和参数include_rts=true,以及count=1。因此您的链接应如下所示
https://api.twitter.com/1/statuses/user_timeline/$userid.xml?count=1&include_rts=1
这是我的最新推文(即使它是转发)
https://api.twitter.com/1/statuses/user_timeline/f000k.xml?count=1&include_rts=1
顺便问一下,为什么不使用JSON而不是XML?
太棒了!对我有用..非常感谢…上帝保佑你。
嗨!我敢肯定我之前来过这个网站,但在查看了一些帖子后,我意识到它对我来说是新的。
无论如何,我非常高兴找到它,我将收藏它并经常查看!
它绝对有效,但状态的“链接化”选项可能更适合更多人。
无论如何,就像上面某个John所说的,这是我所知的、最简单的解决方案。谢谢!
Michael Shur,那个间歇性出现的“无法连接”问题是Twitter的问题,而不是脚本问题。最坏的情况(你不会责怪Twitter或脚本)是服务器上的设置,但我对此表示怀疑。
非常感谢您提供此函数。如何克服“超出速率限制。客户端每小时最多只能发出150个请求。”我看到使用OAuth是解决方案之一,但不确定如何实现它。任何帮助都将不胜感激。
谢谢。
我所做的是将最后一条推文缓存到一个文件中,这样如果遇到速率限制错误或由于任何原因无法从Twitter获取最新的推文,它将使用本地缓存。这可以防止网站出现错误。您可以在 此处 找到它
对我有用,而且易于使用,我在过去的一个小时里尝试了大约3个不同的窗口小部件,但它们都没有满足我的要求。这开始让我抓狂了……谢谢 :)
很棒的代码,对我来说完美地工作!
嗯…除了一个事情
有没有办法只显示普通推文,而不是直接消息/提及/回复?
修复
$userid = htmlspecialchars($userid);
$url = ‘url?’ . $userid . ‘url’;
这个脚本正是我想要的!
它对我有用,谢谢
我正在为客户开发一个网站,他希望他的所有推文都链接到Twitter上的单个推文。我已经将ul包装在一个a标签中,效果很好,但我不知道需要在href属性中放入什么PHP才能使其链接到单个推文。
你们能帮我解决一下吗?
提前感谢!
只是想说声谢谢,代码!完美地工作。
完美!快速、简单且有效。CSS Tricks 再创辉煌!
嗨!昨天停止工作了!!Twitter API有任何更改吗?谢谢。
Twitter 停止使用 XML,需要修复才能与 JSON 和 API 1.1 一起使用
“Twitter 停止使用 XML,需要修复才能与 JSON 和 API 1.1 一起使用。”
是的,非常希望有一个修复或替代方案。有人吗?
如果有人能解释如何以纯文本格式获取 Twitter 帖子,而不是必须使用 Twitter 小部件,那就太好了。
嗨,Dan
我不确定这篇文章是否允许外部链接,但我已在我的网站上提供了修复版本
http://www.naileditdesign.com/tutorials/twitter-feed-for-api-v1-1
我只是想分享一下,我写了一篇关于使用 API v1.1 OAuth 嵌入 Twitter 时间线的文章。
各位,放松点。
感谢以上两篇帖子的更新,都非常感谢!
Twitter API 1.1 不再允许基本身份验证。
尝试查看https://dev.twitter.com/docs/api/1.1
如何控制推文的数量
为此,您需要与墨尔本屋顶专家密切合作,以确保
您也考虑了屋顶能够承受的重量和工作负载。
(3)如果您有宠物,这也很有用,可以
让谷仓周围的灯光不受欢迎的访客无法进入。雪上加霜的是,屋顶承包商
会让他的工人没有保险地爬上您的屋顶,这与可能会忽略大多数安全要求的承包商是同一个人。
<?php $ret = preg_replace("/#(\w+)/", "#\\1“, $ret); ?>
<?php $ret = preg_replace("/#(\w+)/", "#\\1“, $ret); ?>
谢谢 Walter
替换第一行使用第二行
以上两条评论是由于没有 PHP 导致的
一切都变了:https://dev.twitter.com/rest/reference/get/statuses/user_timeline
新的 Twitter API 文档,获取 -> 状态 -> 用户时间线